/**
 * Created by geo on 17/4/19.
 */
/*
为什么使用  工厂模式?
new 是一种具体的, 缺乏弹性的 实例化方法;
如果要实例化一个一系列类(相似的,有公共方法的)中的一个类,可能就会有很多if-else了
JavaScript可以很方便用对象的key替换if-else
* */

//父类构造函数
function CarMarker(){
    //可以放一些公共参数
    this.brand = "BMW";
}
//公共方法放在原型
CarMarker.prototype.drive = function () {
    return "have "+ this.doors +" doors!";
};
//工厂方法
CarMarker.factory = function (type) {
    var car;

    //判断有没有type这种car的构造函数
    if(typeof CarMarker[type] !== "function"){
        throw new Error("no type");
    }

    //有构造函数,看看有没有公共方法, 只会执行一次
    if(typeof CarMarker[type].prototype.drive !== "function"){
        CarMarker[type].prototype = new CarMarker();
    }

    car = new CarMarker[type]();
    return car;
};
//定义car
CarMarker.SUV = function () {
    this.doors = 24;
};
CarMarker.Compact = function () {
    this.doors = 4;
};


////////////test///////////////
var suv = CarMarker.factory("SUV");
console.log(suv.brand);
console.log(suv.drive());
//BMW
//have 24 doors!


var compact = CarMarker.factory("Compact");
console.log(compact.brand);
console.log(compact.drive());
//BMW
//have 4 doors!